package com.cskaoyan.javase.oop1._6constructor;
/**
 * new对象过程中,构造器的赋值一定最后执行
 * 由于上述特点,标准格式构造器的赋值结果一定是准确的.
 * 总结,目前为止,new对象过程中,赋值的方式:
 *      1.默认初始化,具有默认值
 *      2.显式赋值
 *      3.构造器赋值
 * "掐头去尾"
 * 在研究new对象过程中,成员变量赋值顺序时，要遵循"掐头去尾"的原则，三种赋值方式中：
 *      1.默认初始化永远的第一步，这是头。JVM在创建对象结构时,自动给成员变量赋默认值
 *          构造方法执行时(程序员能够控制的成员变量赋值)
 *          都是在默认值基础上进行的,对象的结构已经创建完毕了.
 *      2.在创建对象过程中，无论我们后面还要学多少成员变量的赋值方式，构造器总是最后执行的。这是尾。
 *      注：由于构造器最后执行，那么标准格式书写的构造器的赋值一定是可靠和正确的。"永远可以相信构造器"
 *      3.显式赋值以及后续学习的赋值方式,就在中间执行了.
 *
 * 以上包含以后,对于成员变量的赋值,可以使用IDEA debug模式去查看.
 * new对象过程中,构造器会执行,在debug模式的方法栈帧中,体现为某个类的"<init>"方法栈帧进栈,也就是构造器调用的过程
 *
 *
 * @since 10:43
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        Person p = new Person("李四");
        p.name = "麻子";
        p.setName("王五");
        System.out.println(p.name);
    }
}
class Person{
    // 显式赋值
    String name = "张三";

    public Person(String name) {
        this.name = name;
    }
    public void setName(String name){
        this.name = name;
    }
}